package com.scl.yygh.hosp.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mysql.cj.util.StringUtils;
import com.scl.yygh.common.result.Result;
import com.scl.yygh.common.utils.MD5;
import com.scl.yygh.hosp.service.HospitalSetService;
import com.scl.yygh.model.hosp.HospitalSet;
import com.scl.yygh.vo.hosp.HospitalSetQueryVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Random;

/**
 * @author 超哥
 * @create 2021-07-01 14:51
 * ////////////////////////////////////////////////////////////////////
 * //                          _ooOoo_                               //
 * //                         o8888888o                              //
 * //                         88" . "88                              //
 * //                         (| ^_^ |)                              //
 * //                         O\  =  /O                              //
 * //                      ____/`---'\____                           //
 * //                    .'  \\|     |//  `.                         //
 * //                   /  \\|||  :  |||//  \                        //
 * //                  /  _||||| -:- |||||-  \                       //
 * //                  |   | \\\  -  /// |   |                       //
 * //                  | \_|  ''\---/''  |   |                       //
 * //                  \  .-\__  `-`  ___/-. /                       //
 * //                ___`. .'  /--.--\  `. . ___                     //
 * //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 * //            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 * //            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 * //      ========`-.____`-.___\_____/___.-`____.-'========         //
 * //                           `=---='                              //
 * //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
 * //         佛祖保佑       永无BUG     永不修改                        //
 * ////////////////////////////////////////////////////////////////////
 * 佛曰:
 * 写字楼里写字间，写字间里程序员；
 * 程序人员写程序，又拿程序换酒钱。
 * 酒醒只在网上坐，酒醉还来网下眠；
 * 酒醉酒醒日复日，网上网下年复年。
 * 但愿老死电脑间，不愿鞠躬老板前；
 * 奔驰宝马贵者趣，公交自行程序员。
 * 别人笑我忒疯癫，我笑自己命太贱；
 * 不见满街漂亮妹，哪个归得程序员？
 */
@Api(tags = "医院设置管理")
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
// 允许跨域访问
@CrossOrigin
public class HospitalSetController {
    /***
     * 注入Service
     */
    @Autowired
    private HospitalSetService hospitalSetService;


    /***
     * 获取所有数据
     */
    @ApiOperation(value = "获取所有医院设置")
    @GetMapping("findAll")
    public Result findAllHospitalSet() {
        //调用service的方法
        List<HospitalSet> list = hospitalSetService.list();
        return Result.ok(list);
    }


    /***
     * 删除医院设置
     */
    @ApiOperation(value = "逻辑删除医院设置")
    @DeleteMapping("removeHospSet/{id}")
    public Result removeHospSet(@PathVariable Long id) {
        boolean flag = hospitalSetService.removeById(id);
        if (flag) {
            return Result.ok();
        } else {
            return Result.fail(null);
        }
    }

    /***
     * 条件查询带分页
     */
    @ApiOperation(value = "条件查询带分页")
    @PostMapping("findPageHospSet/{current}/{limit}")
    public Result findPageHospSet(@PathVariable("current") long current,
                                  @PathVariable("limit") long limit,
                                  @RequestBody(required = false) HospitalSetQueryVo queryVo) {
        // 创建Page对象 传递当前页和每页记录数
        Page<HospitalSet> page = new Page<>(current, limit);
        String hosName = "";
        String hosCode = "";
        // 获取条件
        if (queryVo != null) {
            hosName = queryVo.getHosname();
            hosCode = queryVo.getHoscode();
        }
        QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>();
        // 空值判断 避免出现空值被加载为查询条件
        if (!StringUtils.isNullOrEmpty(hosName)) {
            queryWrapper.like("hosname", hosName);
        }
        if (!StringUtils.isNullOrEmpty(hosCode)) {
            queryWrapper.eq("hoscode", hosCode);
        }
        // 执行分页查询
        Page<HospitalSet> result = hospitalSetService.page(page, queryWrapper);
        return Result.ok(result);
    }

    /***
     * 新增医院设置接口
     */
    @ApiOperation(value = "新增医院设置接口")
    @PostMapping("saveHospSet")
    public Result saveHospSet(@RequestBody HospitalSet hospitalSet) {
        // 1. 首先要设置医院的状态 1代表可用 0代表禁用
        hospitalSet.setStatus(1);
        Random random = new Random();
        // 2. 随机生成密钥 规则为MD5加密 系统当前时间加一个随机数
        hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis() + "" + random.nextInt(1000)));
        // 新增
        boolean flag = hospitalSetService.save(hospitalSet);
        if (flag) {
            return Result.ok();
        } else {
            return Result.fail(null);
        }
    }

    /***
     * 根据id获取医院设置
     */
    @ApiOperation(value = "根据id获取医院设置")
    @GetMapping("getHospSetById/{id}")
    public Result getHospSetById(@PathVariable("id") Long id) {
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        return Result.ok(hospitalSet);
    }

    /***
     * 修改医院接口
     */
    @ApiOperation(value = "修改医院设置接口")
    @PostMapping("updateHospSetById")
    public Result updateHospSetById(@RequestBody HospitalSet hospitalSet) {
        boolean flag = hospitalSetService.updateById(hospitalSet);
        if (flag) {
            return Result.ok();
        } else {
            return Result.fail(null);
        }
    }

    /***
     * 批量删除医院设置
     */
    @ApiOperation(value = "批量删除医院设置")
    @DeleteMapping("batchRemove")
    public Result batchRemove(@RequestBody List<Long> ids) {
        hospitalSetService.removeByIds(ids);
        return Result.ok();
    }

    /***
     * 医院锁定和解锁操作
     */
    @ApiOperation(value = "医院锁定和解锁操作")
    @PutMapping("lockHospSet/{id}/{status}")
    public Result lockHospSet(@PathVariable("id") Long id,
                              @PathVariable("status") Integer status) {
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        hospitalSet.setStatus(status);
        boolean flag = hospitalSetService.updateById(hospitalSet);
        if (flag) {
            return Result.ok();
        } else {
            return Result.fail(null);
        }
    }

    /***
     * 发送签名的key
     */
    @ApiOperation(value = "发送签名密钥")
    @GetMapping("getSignKey/{id}")
    public Result getSignKey(@PathVariable("id") Long id) {
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        String signKey = hospitalSet.getSignKey();
        return Result.ok(signKey);
    }
}
